<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 在函数声明关键字后加上*号就可以定义一个生成器
        function* WeaponGenerator(){
            // 并且可以使用yield关键字生成独立的值
            yield "Katana";
            yield "Wakizashi";
            yield "Kusarigama";
        }
        for(let weapon of WeaponGenerator()){
            
            console.assert(false,weapon);
        }
        // 调用生成器后 就会创建一个迭代器
        const weaponsIterator = WeaponGenerator();
        // 可以通过迭代器的next方法向生成器请求一个新值
        const result1 = weaponsIterator.next();
        // 返回的是一个对象 有value与done属性
        // done代表着是否还能返回值(还有没有数据)
        console.log(result1);
        const result2 = weaponsIterator.next();
        console.log(result2);
        const result3 = weaponsIterator.next();
        console.log(result3);
        // 没有数值可以返回或者代码可以执行时 会返回{value: undefined, done: true}
        const result4 = weaponsIterator.next();
        console.log(result4);
    </script>
</body>
</html>